PHP 8.6 ya tiene fecha: llega el 19 de noviembre de 2026. El calendario publicado en la página de preparación del lenguaje se ha ido cumpliendo sin sobresaltos desde julio, con tres alfas hasta el 30 de julio y la beta 1 el 13 de agosto, y el feature freeze se cerró el 22 de septiembre. Ahora tocan las release candidates, con la RC1 el dÃa 24 de ese mismo mes y hasta cuatro más antes de la versión final. Los responsables de esta entrega son Daniel Scherzer, Matteo Beccati y Joe Ferguson.
Aplicación parcial de funciones
La novedad que más va a cambiar cómo se escribe PHP del dÃa a dÃa es la aplicación parcial de funciones (PFA). Permite fijar algunos argumentos de una función y quedarte con un closure que espera el resto. Se marca con un ? el hueco que rellenarás más tarde, y con ... el resto de argumentos:
$makeSlug = str_replace(' ', '-', ?);
$makeSlug('Hello World'); // Hello-World
$titles = array_map(strtolower(?), $titles);
El closure resultante conserva los nombres, tipos y valores por defecto de los parámetros originales. Los argumentos que pasas al crear la parcial se evalúan en ese momento, no cuando la llamas. Una RFC anterior con la misma idea se rechazó en 2021, pero esta segunda versión salió adelante por 33 votos a 0.
clamp(), una clase Duration y más azúcar sintáctico
También llega clamp(), una función que evita el tÃpico min(max($valor, $min), $max) que tantas veces se escribe al revés: clamp(101, min: 0, max: 100) devuelve 100 sin que tengas que pensarlo dos veces. Funciona con cualquier tipo comparable, incluidas cadenas y objetos DateTime, y lanza un ValueError si el mÃnimo es mayor que el máximo.
Para medir tiempos aparece TimeDuration, una clase final y readonly con precisión de nanosegundo, métodos de fábrica por unidad (fromSeconds, fromMilliseconds...) y soporte para sumar, restar y comparar directamente con operadores. Según su RFC, la idea es que sirva de tipo común para que las funciones del núcleo y la nueva API de polling dejen de recibir enteros y floats sueltos.
Las propiedades readonly, por su parte, ya pueden llevar un valor por defecto, algo que antes daba error en tiempo de compilación y obligaba a rodeos para satisfacer interfaces con propiedades de solo lectura. La semántica readonly no cambia: la propiedad sigue sin poder reasignarse una vez inicializada.
Una API de polling y otras piezas para quien construye en serio
El nuevo espacio de nombres IoPoll unifica el acceso a epoll en Linux, kqueue en BSD y macOS, event ports en Solaris y WSAPoll en Windows, y sustituye a stream_select() para quien construye bucles de eventos o runtimes asÃncronos, algo que ya se maneja a mano en librerÃas como ReactPHP. La propia RFC reconoce que la motivación principal es interna, de cara al manejo de señales y a mejoras en FPM, y que los frameworks de async en userland son un beneficiario secundario.
Quedan más piezas sueltas en esta versión. Los doc comments ya pueden ir directamente sobre los parámetros de una función, y ReflectionParameter::getDocComment() los recupera. Hay un enum global SortDirection con los casos Ascending y Descending para que las librerÃas dejen de inventar el suyo propio, y los enums por fin pueden implementar __debugInfo() para personalizar la salida de var_dump(). Los streams estrenan un modelo de errores unificado con más de 50 códigos semánticos en StreamErrorCode, y la extensión URI que llegó en PHP 8.5 gana clases builder para montar una URI sin crear un objeto intermedio por cada componente.
Hay también un cambio de calado en seguridad: tres valores por defecto de sesión en php.ini pasan a activarse solos en instalaciones nuevas: session.use_strict_mode, session.cookie_httponly y session.cookie_samesite, que pasa de no estar definido a valer Lax. Quien use sesiones nativas de PHP y dependa del comportamiento antiguo deberÃa revisarlo antes de actualizar.
TodavÃa queda por delante una segunda tanda de release candidates antes de la disponibilidad general, asà que algún detalle puede cambiar por el camino. Mientras tanto, en programacion.net puedes repasar qué trajeron PHP 8.5.8 y 8.4.23, las últimas versiones de mantenimiento antes de este salto.
Fuente: Laravel News.
